package com.info33.platform.business.app.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.info33.platform.business.app.dto.AppTenantUserDTO;
import com.info33.platform.business.app.entity.AppTenantUser;
import com.info33.platform.business.app.vo.AppTenantUserVO;
import com.info33.platform.common.mvc.vo.Result;
import com.info33.platform.system.dto.SysUserDTO;
import com.info33.platform.system.vo.SysUserVO;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author admin
 */
public interface AppTenantUserService extends IService<AppTenantUser> {

    /**
     * pc - 人员列表
     *
     * @param page-
     * @param dto-
     * @param sysCurrentUser-
     * @return -
     */
    IPage<AppTenantUserVO> pcPage(Page<AppTenantUser> page, AppTenantUserDTO dto, SysUserVO sysCurrentUser);

    /**
     * pc - 人员详情
     *
     * @param uid-
     * @return -
     */
    AppTenantUserVO pcDetail(Long uid);

    /**
     * pc - 获取用户所有租户
     *
     * @param appCurrentUser-
     * @return -
     */
    List<AppTenantUserVO> appTenants(SysUserVO appCurrentUser);

    /**
     * pc - 切换租户
     *
     * @param id-
     * @param currentUser-
     * @return -
     */
    Result<Object> pcSwitch(Long id, SysUserVO currentUser);

    /**
     * pc - 编辑
     *
     * @param dto-
     * @return -
     */
    Result<Object> pcEdit(AppTenantUserDTO dto);

    /**
     * 在线用户列表
     *
     * @return 用户 id + 登录时间
     */
    Map<Long, Date> onLineUser();


    /**
     * 用户租户注册<br/>
     * 避免重复注册，若存在返回旧数据 id
     *
     * @param dto 手机号必须存在，若用户 id 存在，则使用 dto.id 作为用户 id
     * @param tid 租户 id
     * @return sys_user id
     */
    Long register(SysUserDTO dto, Long tid);

    /**
     * app - 切换租户
     *
     * @param atuId-
     * @param currentUser-
     * @return -
     */
    Result<Object> appChange(Long atuId, SysUserVO currentUser);

    /**
     * pc - Excel导出
     *
     * @param dto 参数
     * @param response 响应
     * @return Result<Object>
     */
    Result<Object> deriveUserList(AppTenantUserDTO dto, HttpServletResponse response);
}